package br.com.dallasmotopecas.venda.agenda.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteReagendamentoVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteVo;
import br.com.dallasmotopecas.comum.agenda.vo.AgendaVo;
import br.com.dallasmotopecas.util.data.ManipulacaoData;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;
import br.com.dallasmotopecas.venda.agenda.controller.ManagerListarAgendaController;

@ManagedBean(name="listarAgendaManagerBean")
@ViewScoped
public class ListarAgendaManagerBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private int anoCompetencia;
	private int mesCompetencia;
	private List<AgendaVo> listaAgenda;
	private AgendaVo agendaVo;
	private AgendaClienteVo agendaClienteVo;
	private List<AgendaClienteReagendamentoVo> listaReagendamentos;
	
	public ListarAgendaManagerBean()
	{
		
	}
	
	@PostConstruct
	public void init()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		setAnoCompetencia(0);
		setMesCompetencia(0);
		
		if (getListaAgenda() != null)
		{
			getListaAgenda().clear();
			setListaAgenda(null);
		}
		
		setAgendaVo(null);
		setAgendaClienteVo(null);
		
		if (getListaReagendamentos() != null)
		{
			getListaReagendamentos().clear();
			setListaReagendamentos(null);
		}
	}

	public int getAnoCompetencia()
	{
		return anoCompetencia;
	}

	public void setAnoCompetencia(int anoCompetencia)
	{
		this.anoCompetencia = anoCompetencia;
	}

	public int getMesCompetencia()
	{
		return mesCompetencia;
	}

	public void setMesCompetencia(int mesCompetencia)
	{
		this.mesCompetencia = mesCompetencia;
	}
	
	public AgendaVo getAgendaVo()
	{
		if (agendaVo == null)
			agendaVo = new AgendaVo();

		agendaVo.setUsuarioVo(getUsuarioLogado());
		
		return agendaVo;
	}

	public void setAgendaVo(AgendaVo agendaVo)
	{
		this.agendaVo = agendaVo;
	}
	
	public List<AgendaVo> getListaAgenda()
	{
		if (listaAgenda == null)
			listaAgenda = new ArrayList<AgendaVo>();

		return listaAgenda;
	}

	public void setListaAgenda(List<AgendaVo> listaAgenda)
	{
		this.listaAgenda = listaAgenda;
	}	
	
	public AgendaClienteVo getAgendaClienteVo()
	{
		if (agendaClienteVo == null) agendaClienteVo = new AgendaClienteVo();
		
		return agendaClienteVo;
	}

	public void setAgendaClienteVo(AgendaClienteVo agendaClienteVo)
	{
		this.agendaClienteVo = agendaClienteVo;
	}
	
	public List<AgendaClienteReagendamentoVo> getListaReagendamentos()
	{
		if (listaReagendamentos == null) listaReagendamentos = new ArrayList<AgendaClienteReagendamentoVo>();
		
		return listaReagendamentos;
	}

	public void setListaReagendamentos(List<AgendaClienteReagendamentoVo> listaReagendamentos)
	{
		this.listaReagendamentos = listaReagendamentos;
	}
	
	public void inciarFiltro()
	{
		setAgendaVo(new AgendaVo());
		setAgendaClienteVo(new AgendaClienteVo());
		abrirModal("diagListaFiltro");
	}

	public void listarAgendaPorPeriodo()
	{
		ManagerListarAgendaController managerListarAgendaController = null;
		try
		{
			getAgendaVo().setDataInicialSemana(new java.sql.Date(ManipulacaoData.getPrimeiroDiaMes(getMesCompetencia(), getAnoCompetencia()).getTime()));
			getAgendaVo().setDataFinalSemana(new java.sql.Date(ManipulacaoData.getUltimoDiaMes(getMesCompetencia(), getAnoCompetencia()).getTime()));
			managerListarAgendaController = new ManagerListarAgendaController(getContexto());
			managerListarAgendaController.listarAgendas(getListaAgenda(), getAgendaVo());
			fecharModalSemMensagem("diagListaFiltro");
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerListarAgendaController != null)
			{
				managerListarAgendaController.close();
				managerListarAgendaController = null;
			}
		}
	}
	
	public void listarAtendimentos(AgendaClienteVo agendaClienteVo)
	{
		setAgendaClienteVo(agendaClienteVo);

		abrirModal("agendaListagemAtendimenosDialog");
	}
	
	public void listarReagendamentosCliente(AgendaClienteVo agendaClienteVo)
	{
		ManagerListarAgendaController managerListarAgendaController = null;
		try
		{
			setAgendaClienteVo(agendaClienteVo);
			managerListarAgendaController = new ManagerListarAgendaController(getContexto());
			managerListarAgendaController.listarReagendamentoCliente(agendaClienteVo, getListaReagendamentos());
			abrirModal("listagemRegendamentoDialog");
		}
		catch(ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (managerListarAgendaController != null)
			{
				managerListarAgendaController.close();
				managerListarAgendaController = null;
			}
		}
	}
	
	public void sairAgenda()
	{
		try
		{
			redirecionarPagina("/view/venda/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{
			e.printStackTrace();
		}
	}
}
